package io.sage.ch06.methodrefactoring;

import io.sage.ch06.common.Order;

/**
 * 6.3 Inline Temp （内联临时变量）
 * 问题场景：有一个临时变量只被一个简单表达式赋值一次，而它妨碍了其他重构手法。
 * 重构思路：将所有对该变量的引用动作，替换为对它赋值的那个表达式自身。
 * 做法：
 * 1）检查给临时变量赋值的语句，确保等号右边的表达式没有副作用。
 * 2）如果这个临时变量并未声明为final，那就将其声明为final，然后编译。
 * 3）找到该临时变量所有的引用点，将它们替换为“为临时变量赋值”的表达式。
 * 4）每次修改后，编译并测试。
 * 5）修改完所有引用点后，删除该临时变量的声明和赋值语句。
 * 6）编译，测试。
 */
public class InlineTemp {

    private Order anOrder;

    /**
     * 重构前
     */
    boolean moreThanOneThousand() {
        double basePrice = anOrder.basePrice();
        return (basePrice > 1000);
    }


    /**
     * 重构后
     */
    boolean moreThanOneThousand_new() {
        return (anOrder.basePrice() > 1000);
    }
}
